#include <REGX52.H>
#include "delay.h"

// 按键的键值
unsigned char key;

/** @bref 获得独立键盘的键值
  * @param 无
  * @retval 独立键盘的按下的键值（按键范围1-4，0表示无按键）
  */
unsigned char getKey()
{
	unsigned char temp;
	
	temp = key;
	// 键值清0
	key = 0;
	
	return temp;
}

/** @bref 获得独立键盘的按下的键值状态（无消抖和松手检测）
  * @param 无
  * @retval 独立键盘的按下的键值状态（按键范围1-4，0表示无按键）
  */
unsigned char getKeyStatus()
{
	unsigned char keyNumber = 0;
	
	if(P3_1 == 0){keyNumber = 1;}
	if(P3_0 == 0){keyNumber = 2;}
	if(P3_2 == 0){keyNumber = 3;}
	if(P3_3 == 0){keyNumber = 4;}

	return keyNumber;
}

/**
  * @brief  按键驱动函数，在定时器中断中调用
  * @param  无
  * @retval 无
  */
void key_loop()
{
	// 定义上一回按键状态、现在的按键状态
	static unsigned char lastStatus = 0, currentStatus = 0;
	// 按键状态更新
	lastStatus = currentStatus;
	// 获取当前按键状态
	currentStatus = getKeyStatus();
	
	// 若上次为按下，当前为松开，则是松手瞬间，以此避免消抖和松手检测
	if(lastStatus == 1 && currentStatus == 0)
	{
		key = 1;
	}
	if(lastStatus == 2 && currentStatus == 0)
	{
		key = 2;
	}
	if(lastStatus == 3 && currentStatus == 0)
	{
		key = 3;
	}
		if(lastStatus == 4 && currentStatus == 0)
	{
		key = 4;
	}
}